% vim: tw=78 encoding=utf8 ts=2 sw=2 expandtab softtabstop=2
\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[brazil]{babel}
\usepackage{url}

\title{
{\small Anteprojeto de Tese de Doutorado} \\
Sobre a Adoção de Boas Práticas 
de Desenvolvimento de Software 
em Projetos de Software Livre}
\author{Rodrigo Rocha Gomes e Souza\\
\texttt{rodrigo@dcc.ufba.br}}

\date{Dezembro de 2009}

\begin{document}

\sloppy
\maketitle

% TODO: Agile Practices: http://books.google.com.br/books?hl=pt-BR&lr=&id=9J_0ly01QicC&oi=fnd&pg=PR13&dq=agile+development+assessment&ots=wUzpQHk_03&sig=kM7FGLX3vmn7Z5MxM4RjSn_a99U#v=onepage&q=practices&f=false 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% OBJETIVO: práticas mais realistas OU 
% coordenação do desenvolvimento

\section{Motivação} % QUAL É O PROBLEMA?
% contexto, problema, relevância

% CONTEXTO
No contexto de desenvolvimento de software, boas práticas são estratégias ou
atividades que comprovadamente contribuem para o sucesso de um projeto de
software. Existem centenas de boas práticas documentadas, muitas delas
associadas a processos de desenvolvimento, tais como RUP e XP
\cite{jacobson2007}. Exemplos de práticas incluem integração contínua de
mudanças e o uso de testes de unidade automatizados.

A aplicação de boas práticas dentro de uma equipe torna-a mais competitiva ao
equilibrar as diferenças de desempenho entre seus membros.  Não obstante, a
transferência de práticas entre desenvolvedores pode ser prejudicada por
diversos fatores, como falta de motivação ou de experiência
\cite{szulanski1996}.

Projetos de software livre são tipicamente caracterizados pela participação de
voluntários com diferentes níveis de envolvimento, o que é um fator que
potencialmente dificulta a transferência de práticas na equipe. Outro fator é a
alta rotatividade de desenvolvedores \cite{robles2006}. Além disso, comparado a
projetos desenvolvidos por empresas, projetos de software livre geralmente
possuem uma estrutura de controle menos centralizada \cite{raymond2001}, o que
reforça a importância de interações entre desenvolvedores na propagação de boas
práticas.

A estrutura social de uma equipe é composta de indivíduos, suas ações e suas
interações \cite{crowston2005}. Para entender a disseminação de práticas, é
preciso entender aspectos como o tamanho e a tendência de crescimento dos número
de desenvolvedores; a distribuição de trabalho e o grau de especialização dos
membros do projeto; a comunicação e a transferência de trabalho entre
desenvolvedores.

A maioria dos estudos sobre o desenvolvimento de software livre foca a produção
de código-fonte, e apenas alguns investigam a interação entre desenvolvedores
\cite{crowston2005}. Dentre estes últimos, a maior parte consiste de estudos de
caso. Mockus et al. \cite{mockus2002}, por exemplo, estudaram os projetos Apache
e Mozilla e caracterizaram a distribuição do esforço de codificação e de relato
de \emph{bugs} entre participantes dos projetos. Uma das conclusões do estudo é
que o número de pessoas que reportam \emph{bugs} é uma ordem de magnitude maior
do que o número de pessoas que reparam \emph{bugs}. Mas até que ponto essa e
outras observações podem ser generalizadas dentro do universo de projetos de
software livre?

Segundo Crowston e Howison \cite{crowston2005}, a falta de estudos em larga
escala, envolvendo múltiplos projetos, reflete ``o estágio inicial desse tipo de
pesquisa, a complexidade do fenômeno e a dificuldade de se obter dados
comparáveis de projetos diferentes''. Obter dados comparáveis sobre a estrutura
social e sobre a aplicação de boas práticas em uma amostra significativa de
projetos de software livre é um desafio de pesquisa. Enquanto técnicas de
análise de redes sociais têm sido aplicadas com sucesso em diversos estudos, as
possibilidades da mineração de processos \cite{aalst2004} na investigação de
práticas de desenvolvimento de software são poucos exploradas, porém
promissoras \cite{rubin2007}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Objetivo}

O principal objetivo desta pesquisa é entender como a adoção de boas práticas em
um projeto de software é afetada pela evolução da estrutura social e de outras
características do projeto. Pretende-se assim identificar em quais contextos
determinadas práticas são efetivamente aplicadas e entender os mecanismos que
reforçam a adoção de práticas de desenvolvimento de software.

Serão investigadas, entre outras, os seguintes aspectos de projetos de software
livre:
\begin{itemize}
  \item idade do projeto;
  \item tamanho do software;
  \item número de desenvolvedores;
  \item número de downloads do software;
  \item atividade em listas de discussão;
  \item atividade em sistemas de acompanhamento de \emph{bugs};
  \item distribuição do esforço de codificação entre desenvolvedores.
\end{itemize}

A análise será focada nas atividades de implementação e controle de qualidade.
Serão investigadas, entre outras, as seguintes práticas:
\begin{itemize}
%  \item uso de testes de unidade automatizados;
  \item implementação de testes de unidade automatizados antes da implementação
  de funcionalidades;
  \item implementação dos testes por pessoas diferentes daquelas que
  implementam funcionalidades;
  \item correção de \emph{bugs} antes da implementação de novas funcionalidades;
  \item integração contínua das mudanças com o repositório de código-fonte;
  \item posse coletiva de código.
  % coding standards
%  \item revisão de código.
\end{itemize}

Espera-se, com este trabalho, chegar a respostas para questões de pesquisa
como as que se seguem:

\begin{itemize}
  \item A adoção de boas práticas é afetada pelo tamanho da equipe? Quais
práticas são mais afetadas? Existem evidências de que certas práticas
preconizadas por métodos ágeis são difíceis de se aplicar em equipes grandes
\cite{nerur2005}.
  \item A adoção de práticas é mais uniforme em projetos mais centralizados? Uma
resposta positiva a esta questão pode sugerir que é importante buscar formas de
centralizar o desenvolvimento de projetos de software.
  \item Existe relação entre a adoção de práticas e o perfil de um
desenvolvedor? Por exemplo, será que desenvolvedores que participam ativamente
de listas de discussão do projeto tendem a seguir mais boas práticas?
  \item A saída de desenvolvedores de um projeto prejudica a adoção de boas
práticas? De que forma? Que estratégias para perpetuar boas práticas face à
saída de desenvovledores têm se mostrado bem sucedidas?
\end{itemize}

%O conhecimento produzido por esta pesquisa poderá ser usado para se adquirir
%maior controle sobre as práticas adotadas em um projeto, tornando o seu
%desenvolvimento mais previsível.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Metodologia}

% TODO: projeto piloto, estudo exploratório preliminar
% TODO: SourceForge.

% VIABILIDADE DO ESTUDO
%   Por que software livre? Porque há dados!
%   Restrição a software livre restringe generalidade dos resultados, uma vez que
% em média os processos de sw livre são diferentes de processos de empresas. Mas
% não diminui a importância do estudo, pois sw livre é muito importante!

% Atividade 1
Em primeiro lugar será realizada uma revisão bibliográfica de tópicos como
engenharia de software experimental, processos e práticas de desenvolvimento de
software, desenvolvimento de software livre, mineração de processos, análise de
redes sociais e estatística. Os objetivos são a identificação de trabalhos
correlatos e abordagens complementares, bem como a familiarização com técnicas
que poderão ser usadas na pesquisa.

Pretende-se estudar projetos de software livre hospedados no repositório
SourceForge.net, que abriga cerca de 230 mil
projetos\footnote{\url{http://sourceforge.net/about}}. O SourceForge.net
disponibiliza publicamente, para cada projeto, informações sobre o número de
\emph{downloads} e idade do projeto, além de sistema de controle de versão,
sistema de acompanhamento de \emph{bugs} e listas de discussão. 

A grande disponibilidade de dados relacionados ao desenvolvimento favorece a
realização de estudos em larga escala. Nesta pesquisa serão utilizados
predominantemente métodos quantitativos de análise de dados para viabilizar o
estudo de uma amostra significativa de projetos de software livre. Espera-se
assim obter conclusões generalizáveis sobre o uso de boas práticas em projetos
de software livre.

% Atividade 2
A princípio serão realizados estudos de caso com um pequeno conjunto de
sistemas, em caráter exploratório, a fim de se adquirir familiaridade com as
informações disponíveis e com ferramentas de extração e análise de dados. As
questões de pesquisa serão refinadas de acordo com observações realizadas nessa
etapa.

% Atividade 3
A seguir será realizado um estudo em larga escala, considerando uma amostra
significativa de projetos estratificada de acordo com dados como número de
desenvolvedores e tamanho do software. Serão extraídos dados de repositórios de
controle de versão, sistemas de acompanhamento de \emph{bugs} e listas de
discussão.

A identificação das práticas adotadas por um projeto será feita a partir do uso
de técnicas de mineração de processos \cite{aalst2004} sobre o histórico dos
dados extraídos do projeto. Tais técnicas têm como finalidade extrair modelos de
processos a partir de dados temporais e já foram aplicadas em estudos sobre as
atividades realizadas durante o desenvolvimento de sistemas de software
\cite{rubin2007}.

A organização social dos desenvolvedores será estudada através de técnicas de
análise de redes sociais \cite{newman2003}. Essas técnicas já foram aplicadas
com sucesso em estudos anteriores \cite{crowston2005} e permitem investigar
aspectos como a transferência e a concentração de trabalho entre
desenvolvedores. 

Para responder às questões de pesquisa, serão usados métodos de análise
exploratória de dados e inferência estatística, relacionando características de
projetos e de desenvolvedores, o histórico de desenvolvimento e a aplicação de
boas práticas. A partir dos resultados da análise poderão ser realizadas
investigações mais aprofundadas sobre projetos selecionados e comparações com
resultados obtidos em estudos de caso.

% Atividade 4
Pretende-se divulgar a pesquisa através da publicação de artigos em congressos
ou periódicos. Estão previstos pelo menos dois artigos: o primeiro com
resultados do estudo de caso e o segundo com resultados do estudo em larga
escala.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Proposta de Cronograma}
\newcommand{\newrow}{\\\hline}
\newcommand{\x}{$\bullet$}

As seguintes atividades serão realizados durante este projeto, de acordo com os
prazos indicados na Tabela \ref{tab:cronograma}:

\begin{enumerate}
  \item \label{prevista:estudos}
    \textbf{revisão bibliográfica};
  \item \label{prevista:preliminares}
    \textbf{realização de estudos de caso};
  \item \label{prevista:experimentos}
    \textbf{realização de um estudo em larga escala};
  \item \label{prevista:artigos}
    \textbf{divulgação científica};
  \item \label{prevista:redacao}
    \textbf{redação e defesa da tese}.
\end{enumerate}

\begin{table}[h]
  \centering
  \begin{tabular}{|c|c|c|c|c|c|c|c|c|} \hline
    Atividade                   & 2010.1 & 2010.2 & 2011.1 & 2011.2  & 2012.1 & 2012.2  & 2013.1 & 2013.2 \newrow
    \ref{prevista:estudos}      & \x     & \x     & \x     &         &        &         &        &        \newrow
    \ref{prevista:preliminares} &        &        & \x     & \x      &        &         &        &        \newrow
    \ref{prevista:experimentos} &        &        &        &         & \x     & \x      &        &        \newrow
    \ref{prevista:artigos}      &        &        &        & \x      &        & \x      &        &        \newrow
    \ref{prevista:redacao}      &        &        &        &         &        & \x      & \x     & \x     \newrow
  \end{tabular}
 \caption{Proposta de Cronograma de Atividades}
 \label{tab:cronograma}
\end{table}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\bibliographystyle{plain}
\bibliography{doutorado}

\end{document}
